public class Test {
    public static void main(String[] args) {
        //替换所有的问号
        //https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/
    }
}

class Solution {
    public String modifyString(String s) {
        int n = s.length();
        char[] chars = s.toCharArray();
        for(int i = 0; i<chars.length; i++){
            char c = chars[i];
            if(c =='?'){
                for(char ch = 'a'; ch<='z'; ch++){
                    if(((i==0)||(ch!=chars[i-1]))&&((i==n-1)||(ch!=chars[i+1]))){//这里的处理很巧妙！！！
                        chars[i] = ch;
                        break;
                    }
                }
            }
        }
        return new String(chars);
    }
}

//这个的问题在于：整体逻辑还好，但是实行起来，分布到每一步上，就不太独立，不够清晰。
//             还有就是，数学逻辑没弄清
//             可以改一下，但是，先时间有点紧，先写老师的思路吧（注意老师思路中的“主体性”——动谁、不动谁）
class Solution1 {
    public String modifyString(String s) {

        int len = s.length();

        char[] chars = new char[len];

        /*chars[0] = s.charAt(0);
        chars[len-1] = s.charAt(len-1);

        for (int i = 1; i < len-1; i++) {
            chars[i] = s.charAt(i);
        }*/

        chars = s.toCharArray();

        if(chars[0]=='?'){
            if(chars[1]!='?'){
                //其实这里用数学逻辑进行规定可能会更清晰。但是，我现在还没有想到合适的数学逻辑，所以暂且先用if-else
                if(chars[1]!='a'&&chars[1]!='z'){
                    chars[0]=(char)(chars[1]+1);;
                }else{
                    chars[0]='a';
                }
            }else{
                chars[0]='a';
            }
        }
        if(chars[len-1]=='?')chars[len-1]=(char)((chars[len-2]+2)%97+97);

        for (int i = 1; i < len; i++) {
            if(chars[i]=='?'){
                if(chars[i-1]!='a'&&chars[i-1]!='z'){
                    chars[0]=(char)(chars[1]+1);
                }else{
                    chars[0]='a';
                }


            }
        }
    }
}
